package com.weiiew.buildservice.service;

import com.weiiew.common.entity.dto.Building;
import com.weiiew.common.entity.qo.BuildingQo;
import com.weiiew.common.entity.simple.SimpleBuilding;
import com.weiiew.common.entity.simple.SimpleItem;
import com.weiiew.common.entity.simple.SimpleType;
import com.weiiew.common.entity.vo.BuildingVO;
import com.weiiew.common.exception.messageException;

import java.util.List;

/**
 * @author 魏锴
 * @description 针对表【building】的数据库操作Service
 * @createDate 2024-02-09 17:56:29
 */
public interface BuildingService {

    boolean insertBuilding(Building building, Integer id, Integer version);
    /**
     * 保存或者更新建筑
     *
     * @param building 建筑信息
     * @param id
     * @param version
     * @return 保存结果
     */
    boolean updateBuilding(Building building, Integer id, Integer version);

    /**
     * 移除建筑
     *
     * @param id      建筑id
     * @param version
     * @return 删除结果
     */
    boolean removeBuilding(Integer id, Integer version) throws messageException;

    /**
     * 获取所有的建筑种类信息
     *
     * @param version 版本号
     * @return 建筑种类列表
     */
    List<SimpleType> getBuildingTypes(Integer version);

    /**
     * 根据成为建筑花费频率排序的物品列表
     *
     * @param version 版本号
     * @return 物品列表
     */
    List<SimpleItem> getBuildingCosts(Integer version); // 获取建筑花费排序

    /**
     * 根据建筑id获取建筑信息
     *
     * @param id 建筑id
     * @return 建筑信息
     */

    Building getBuildingById(Integer id);

    /**
     * 根据搜索条件进行建筑搜索
     *
     * @param qo 查询条件
     * @return 满足条件党的建筑列表
     */
    List<BuildingVO> getBuildingList(BuildingQo qo);

    /**
     * 获取符合搜索条件的建筑列表长度
     * @param qo 搜索条件
     * @return 列表长度
     */
    Integer getBuildingLength(BuildingQo qo);


    BuildingVO getDetailBuild(Integer id);

    /**
     * 根据建筑材料获取符合条件的建筑列表
     * @param id 物品id
     * @return 建筑列表
     */
    List<BuildingVO> getBuildingsByCostId(Integer id);

    /**
     * 根据版本号获取建筑图标
     * @param version 版本号
     * @return 图标列表
     */
    List<String> getBuildIconList(Integer version);

    /**
     * 根据搜索条件进行建筑搜索
     *
     * @param qo 查询条件
     * @return 满足条件党的建筑列表
     */
    List<SimpleBuilding> getSimpleBuildingList(BuildingQo qo);
}
